/* -*- jde -*- */
package app.alumnoe.catalogos;

import app.alumnoe.catalogos.beans.Carrera;
import app.conexion.Conexion;
import app.conexion.ConexionException;
import app.util.appException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * La clase que contiene la lista de carreras
 *
 * @author Victor Miguel Peralta Santa Anna
 * @since Diciembre 2011
 * @version 0.1
 */
public class Carreras {

    /**
     * La lista de Carreras que se tienen en la base de datos.
     */
    private LinkedList<Carrera> carreras = new LinkedList<Carrera>();

    /**
     * Se obliga el uso a métodos estáticos.
     */
    public Carreras() throws appException {
        getCarrerasBase();
    }

    /**
     * Método que inicializa la lista con las carreras existentes en la base de
     * datos
     *
     * @throws appException
     */
    private void getCarrerasBase() throws appException {
        try {
            Conexion con = new Conexion();

            carreras.clear();
            String query = "select * from carreras;";

            ResultSet r;

            r = con.exec(query);

            while (r.next()) {
                int id = r.getInt("ncarreras");
                String carrera = r.getString("scarrera");
                carreras.add(new Carrera(id, carrera));
            }

            con.close();
        } catch (SQLException ex) {
            System.err.println(ex);
            Logger.getLogger(Carreras.class.getName()).log(Level.SEVERE, null, ex);
            throw new appException("No se pueden recuperar las carreras de la base de datos");
        } catch (ConexionException ex) {
            System.err.println(ex);
            Logger.getLogger(Carreras.class.getName()).log(Level.SEVERE, null, ex);
            throw new appException("No se pueden recuperar las carreras de la base de datos");
        }

    }

    /**
     * Regresa la lista de carreras después de haber inicializado la lista
     *
     * @return La lista de carreras disponibles.
     */
    public LinkedList<Carrera> getCarreras() {
        return carreras;
    }

    /**
     * Conexiones de prueba a la base de datos
     *
     * @param args
     * @throws ConexionException
     * @throws SQLException
     * @throws appException
     */
    public static void main(String args[]) throws ConexionException, SQLException, appException {


        Carreras c = new Carreras();

        LinkedList<Carrera> carreras = c.getCarreras();

        System.out.println(carreras);



    }
}
